require(phyloseq)
require(tidyverse)
require(phyloseq)
require(reshape2)
require(dplyr)
require(ggplot2)

Load data

ps_dmn <- readRDS("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/data/PhyloseqObjects/16S/DMN_ests_16S.Rdata")
sample_data(ps_dmn)$Herbicide <- factor(sample_data(ps_dmn)$Herbicide, levels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))
sample_data(ps_dmn)$herb_time<-paste(sample_data(ps_dmn)$Herbicide, sample_data(ps_dmn)$Time, sep = "_")
ps_rare <- readRDS("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/data/PhyloseqObjects/16S/HerbPt1_rare_16S.Rdata")
sample_data(ps_rare)$Herbicide <- factor(sample_data(ps_rare)$Herbicide, levels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))
sample_data(ps_rare)$herb_time<-paste(sample_data(ps_rare)$Herbicide, sample_data(ps_rare)$Time, sep = "_")
ps_trans <- readRDS("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/data/PhyloseqObjects/16S/HerbPt1_hel_trans_16S.Rdata")
sample_data(ps_trans)$Herbicide <- factor(sample_data(ps_trans)$Herbicide, levels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))
sample_data(ps_trans)$herb_time<-paste(sample_data(ps_trans)$Herbicide, sample_data(ps_trans)$Time, sep = "_")

create alphadiversity tables

alpha_div <- estimate_richness(physeq = ps_rare, measures = c("Observed", "Shannon", "Chao1"))
#pull out metadata and concatonate with alpha diversity metrics
md<-data.frame(sample_data(ps_rare))
alpha_div_md <- rownames_to_column(alpha_div, "Barcode_ID_G") %>% full_join(md) 
Joining, by = "Barcode_ID_G"
alpha_div_md$Herbicide <- factor(alpha_div_md$Herbicide, levels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))

Shannon Div plots - no significant differences among herbicide treatments at any of the three time points

ggplot(data = alpha_div_md, aes(Herbicide, Shannon, color= Herbicide)) + facet_grid(. ~ Time) + geom_boxplot() + theme_classic() + theme(axis.text.x = element_text(angle = 45, hjust = 1) )

ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_Shannon.pdf")

aov_t1<-aov(Shannon ~ Herbicide, data = alpha_div_md[alpha_div_md$Time == "T1",])
plot(aov_t1$residuals)
summary(aov_t1)

aov_t2<-aov(Shannon ~ Herbicide, data = alpha_div_md[alpha_div_md$Time == "T2",])
plot(aov_t2$residuals)
summary(aov_t2)

aov_t3<-aov(Shannon ~ Herbicide, data = alpha_div_md[alpha_div_md$Time == "T3",])
plot(aov_t3$residuals)
summary(aov_t3)

ordinations and adonis testing with three separate objects (i.e., dmn, rarefied, transformed). Rare taxa are removed from rarefied and transfomred to sucessfully ordinate. At this point, the transformed data will not ordinate.

ord_dmn<-ordinate(physeq = ps_dmn, method = "NMDS", distance = "bray", k=3, trymax= 300, maxit=1000)

ps_rare_sub<-prune_taxa(taxa_sums(ps_rare) > 2, ps_rare)
ord_rare<-ordinate(physeq = ps_rare_sub, method = "NMDS", distance = "bray", k=3, trymax= 300, maxit=1000)

ps_trans_sub<-prune_taxa(taxa_sums(ps_trans) > 0.05, ps_trans)
ord_transformed<-ordinate(physeq = ps_trans_sub, method = "NMDS", distance = "bray", trymax= 300, maxit=1000)

Adonis testing of herbicide treatments by time point

ps_adonis<-function(physeq){
  otu_tab<-data.frame(phyloseq::otu_table(physeq))
  md_tab<-data.frame(phyloseq::sample_data(physeq))
    if(taxa_are_rows(physeq)== T){
       physeq_dist<-parallelDist::parDist(as.matrix(t(otu_tab)), method = "bray")}
            else{physeq_dist<-parallelDist::parDist(as.matrix(otu_tab), method = "bray")}
  print(anova(vegan::betadisper(physeq_dist, md_tab$Herbicide)))
  vegan::adonis(physeq_dist ~ Herbicide * Time, data = md_tab, permutations = 100)
}
ps_adonis(ps_rare_sub)
Analysis of Variance Table

Response: Distances
           Df   Sum Sq    Mean Sq F value Pr(>F)
Groups      4 0.002281 0.00057033  0.4454 0.7756
Residuals 160 0.204866 0.00128041               

Call:
vegan::adonis(formula = physeq_dist ~ Herbicide * Time, data = md_tab,      permutations = 100) 

Permutation: free
Number of permutations: 100

Terms added sequentially (first to last)

                Df SumsOfSqs MeanSqs F.Model      R2   Pr(>F)   
Herbicide        4    0.7552 0.18880  1.1017 0.02657 0.059406 . 
Time             2    0.3792 0.18959  1.1063 0.01334 0.049505 * 
Herbicide:Time   8    1.5797 0.19747  1.1523 0.05559 0.009901 **
Residuals      150   25.7059 0.17137         0.90450            
Total          164   28.4200                 1.00000            
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ps_adonis(ps_trans_sub)
Analysis of Variance Table

Response: Distances
           Df  Sum Sq   Mean Sq F value Pr(>F)
Groups      4 0.00766 0.0019139   0.279 0.8912
Residuals 165 1.13173 0.0068590               

Call:
vegan::adonis(formula = physeq_dist ~ Herbicide * Time, data = md_tab,      permutations = 100) 

Permutation: free
Number of permutations: 100

Terms added sequentially (first to last)

                Df SumsOfSqs  MeanSqs F.Model      R2 Pr(>F)  
Herbicide        4    0.3876 0.096908 0.97867 0.02300 0.6436  
Time             2    0.2666 0.133309 1.34628 0.01582 0.0198 *
Herbicide:Time   8    0.8525 0.106561 1.07615 0.05058 0.1089  
Residuals      155   15.3481 0.099020         0.91061         
Total          169   16.8549                  1.00000         
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ps_adonis(ps_dmn)
Analysis of Variance Table

Response: Distances
           Df   Sum Sq   Mean Sq F value  Pr(>F)  
Groups      4 0.019549 0.0048873  2.8407 0.02596 *
Residuals 165 0.283879 0.0017205                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Call:
vegan::adonis(formula = physeq_dist ~ Herbicide * Time, data = md_tab,      permutations = 100) 

Permutation: free
Number of permutations: 100

Terms added sequentially (first to last)

                Df SumsOfSqs  MeanSqs F.Model      R2   Pr(>F)   
Herbicide        4    0.2226 0.055638  2.2900 0.04823 0.009901 **
Time             2    0.1044 0.052199  2.1484 0.02263 0.009901 **
Herbicide:Time   8    0.5214 0.065169  2.6823 0.11299 0.009901 **
Residuals      155    3.7659 0.024296         0.81615            
Total          169    4.6142                  1.00000            
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Ordination plots DMN

ord_t1_dmn<-ordinate(physeq = subset_samples(ps_dmn, Time=="T1"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T1_dmn<-ggordiplots::gg_ordiplot(ord = ord_t1_dmn, groups = data.frame(sample_data(subset_samples(ps_dmn, Time == "T1")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T1_dmn$plot + theme_classic()

ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_dmn_T1.pdf")

ord_t2_dmn<-ordinate(physeq = subset_samples(ps_dmn, Time=="T2"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T2_dmn<-ggordiplots::gg_ordiplot(ord = ord_t2_dmn, groups = data.frame(sample_data(subset_samples(ps_dmn, Time == "T2")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T2_dmn$plot + theme_classic()
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_dmn_T2.pdf")


ord_t3_dmn<-ordinate(physeq = subset_samples(ps_dmn, Time=="T3"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T3_dmn<-ggordiplots::gg_ordiplot(ord = ord_t3_dmn, groups = data.frame(sample_data(subset_samples(ps_dmn, Time == "T3")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T3_dmn$plot + theme_classic()
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_dmn_T3.pdf")

Ordination plots rarefied

ord_t1_rare<-ordinate(physeq = subset_samples(ps_rare, Time=="T1"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T1_rare<-ggordiplots::gg_ordiplot(ord = ord_t1_rare, groups = data.frame(sample_data(subset_samples(ps_rare, Time == "T1")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T1_rare$plot + theme_classic()

ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_rare_T1.pdf")

ord_t2_rare<-ordinate(physeq = subset_samples(ps_rare, Time=="T2"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T2_rare<-ggordiplots::gg_ordiplot(ord = ord_t2_rare, groups = data.frame(sample_data(subset_samples(ps_rare, Time == "T2")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T2_rare$plot + theme_classic()
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_rare_T2.pdf")


ord_t3_rare<-ordinate(physeq = subset_samples(ps_rare, Time=="T3"), method = "NMDS", distance = "bray", k=3, trymax= 100)
T3_rare<-ggordiplots::gg_ordiplot(ord = ord_t3_rare, groups = data.frame(sample_data(subset_samples(ps_rare, Time == "T3")))$Herbicide, choices = c(1, 2), kind = c("se"), conf = 0.95, show.groups = "all", ellipse = TRUE, label = FALSE, hull = FALSE, spiders = FALSE, plot = TRUE, pt.size = 1)
T3_rare$plot + theme_classic()
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_ordination_rare_T3.pdf")

box and whisker plots of distance within group distances

library(micrUBIfuns)
beta_boxplot(physeq = subset_samples(ps_rare, Time=="T1"), method = "bray", group = "Herbicide")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T1_rare_withingroup_beta.pdf")
beta_boxplot(physeq = subset_samples(ps_rare, Time=="T2"), method = "bray", group = "Herbicide")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T2_rare_withingroup_beta.pdf")
beta_boxplot(physeq = subset_samples(ps_rare, Time=="T3"), method = "bray", group = "Herbicide")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T3_rare_withingroup_beta.pdf")

treatment to control

plotDistances = function(p, m, s, d) {

  # calc distances
  wu = phyloseq::distance(p, m)
  wu.m = melt(as.matrix(wu))
  
  # remove self-comparisons
  wu.m = wu.m %>%
    filter(as.character(Var1) != as.character(Var2)) %>%
    mutate_if(is.factor,as.character)
  
  # get sample data (S4 error OK and expected)
  sd = data.frame(sample_data(p)) %>%
    select(s, d) %>%
    mutate_if(is.factor,as.character)
  sd$Herbicide <- factor(sd$Herbicide, levels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))
  
  # combined distances with sample data
  colnames(sd) = c("Var1", "Type1")
  wu.sd = left_join(wu.m, sd, by = "Var1")
  
  colnames(sd) = c("Var2", "Type2")
  wu.sd = left_join(wu.sd, sd, by = "Var2")
  
  #remove this line to plot all comparisons. 
  wu.sd = wu.sd %>% filter(Type1 == "Hand" | Type1 == "Non-Treated")
  
  # plot
  ggplot(wu.sd, aes(x = Type2, y = value)) +
    theme_bw() +
    geom_point() +
    geom_boxplot(aes(color = ifelse(Type1 == Type2, "red", "black"))) +
    scale_color_identity() +
    facet_wrap(~ Type1, scales = "free_x") +
    theme(axis.text.x=element_text(angle = 45, hjust = 1, size = 5)) + 
    ggtitle(paste0("Distance Metric = ", m))
  
}
a<-plotDistances(p = subset_samples(physeq= ps_rare, Time=="T1"), m = "bray", s = "Barcode_ID_G", d = "Herbicide")
a <- a + ggtitle("Time 1 Bray-Curtis Dissimlarities")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T1_rare_allgroup_beta.pdf")
b<-plotDistances(p = subset_samples(physeq= ps_rare, Time=="T2"), m = "bray", s = "Barcode_ID_G", d = "Herbicide")
b <-b + ggtitle("Time 2 Bray-Curtis Dissimlarities")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T2_rare_allgroup_beta.pdf")
c<-plotDistances(p = subset_samples(physeq= ps_rare, Time=="T3"), m = "bray", s = "Barcode_ID_G", d = "Herbicide")
c<- c + ggtitle("Time 3 Bray-Curtis Dissimlarities")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_T3_rare_allgroup_beta.pdf")

library(ggpubr)
ggarrange(a, b, c, ncol = 1)
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_combined_rare_allgroup_beta.pdf", width = 7, height = 10)

Taxon abundance bar plot

#create super long color vector
col_vector <- c("#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
        "#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
        "#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
        "#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
        "#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
        "#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
        "#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
        "#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",
        
        "#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
        "#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
        "#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
        "#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
        "#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
        "#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
        "#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
        "#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58",
        
        "#7A7BFF", "#D68E01", "#353339", "#78AFA1", "#FEB2C6", "#75797C", "#837393", "#943A4D",
        "#B5F4FF", "#D2DCD5", "#9556BD", "#6A714A", "#001325", "#02525F", "#0AA3F7", "#E98176",
        "#DBD5DD", "#5EBCD1", "#3D4F44", "#7E6405", "#02684E", "#962B75", "#8D8546", "#9695C5",
        "#E773CE", "#D86A78", "#3E89BE", "#CA834E", "#518A87", "#5B113C", "#55813B", "#E704C4",
        "#00005F", "#A97399", "#4B8160", "#59738A", "#FF5DA7", "#F7C9BF", "#643127", "#513A01",
        "#6B94AA", "#51A058", "#A45B02", "#1D1702", "#E20027", "#E7AB63", "#4C6001", "#9C6966",
        "#64547B", "#97979E", "#006A66", "#391406", "#F4D749", "#0045D2", "#006C31", "#DDB6D0",
        "#7C6571", "#9FB2A4", "#00D891", "#15A08A", "#BC65E9", "#FFFFFE", "#C6DC99", "#203B3C",

        "#671190", "#6B3A64", "#F5E1FF", "#FFA0F2", "#CCAA35", "#374527", "#8BB400", "#797868",
        "#C6005A", "#3B000A", "#C86240", "#29607C", "#402334", "#7D5A44", "#CCB87C", "#B88183",
        "#AA5199", "#B5D6C3", "#A38469", "#9F94F0", "#A74571", "#B894A6", "#71BB8C", "#00B433",
        "#789EC9", "#6D80BA", "#953F00", "#5EFF03", "#E4FFFC", "#1BE177", "#BCB1E5", "#76912F",
        "#003109", "#0060CD", "#D20096", "#895563", "#29201D", "#5B3213", "#A76F42", "#89412E",
        "#1A3A2A", "#494B5A", "#A88C85", "#F4ABAA", "#A3F3AB", "#00C6C8", "#EA8B66", "#958A9F",
        "#BDC9D2", "#9FA064", "#BE4700", "#658188", "#83A485", "#453C23", "#47675D", "#3A3F00",
        "#061203", "#DFFB71", "#868E7E", "#98D058", "#6C8F7D", "#D7BFC2", "#3C3E6E", "#D83D66",

        "#2F5D9B", "#6C5E46", "#D25B88", "#5B656C", "#00B57F", "#545C46", "#866097", "#365D25",
        "#252F99", "#00CCFF", "#674E60", "#FC009C", "#92896B")
phylumGlommed <- tax_glom(ps_rare, "Phylum")

#t1
phylumGlommed_herb_t1 <- merge_samples(subset_samples(physeq= phylumGlommed, Time=="T1"), group = "Herbicide")
phylumGlommed_herb_t1 <- transform_sample_counts(phylumGlommed_herb_t1, function(OTU) OTU/sum(OTU))
sample_data(phylumGlommed_herb_t1)$Herbicide <- factor(sample_data(phylumGlommed_herb_t1)$Herbicide, levels = c(1, 2, 3, 4, 5), 
       labels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))

plot_bar(phylumGlommed_herb_t1, x = "Herbicide", fill = "Phylum")  + theme_classic() + ggtitle("Proportional Taxon Abundances Time 1") +
theme(legend.position="bottom") + guides(fill=guide_legend(nrow=6)) + geom_bar(stat="identity") + theme(axis.text.x=element_text(angle = 45, hjust = 1, size = 5)) + 
scale_fill_manual(values = col_vector)
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_Taxon_barplot_t1.pdf")

#t2
phylumGlommed_herb_t2 <- merge_samples(subset_samples(physeq= phylumGlommed, Time=="T2"), group = "Herbicide")
phylumGlommed_herb_t2 <- transform_sample_counts(phylumGlommed_herb_t2, function(OTU) OTU/sum(OTU))
sample_data(phylumGlommed_herb_t2)$Herbicide <- factor(sample_data(phylumGlommed_herb_t2)$Herbicide, levels = c(1, 2, 3, 4, 5), 
       labels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))

plot_bar(phylumGlommed_herb_t2, x = "Herbicide", fill = "Phylum")  + theme_classic() + ggtitle("Proportional Taxon Abundances Time 1") +
theme(legend.position="bottom") + guides(fill=guide_legend(nrow=6)) + geom_bar(stat="identity") + theme(axis.text.x=element_text(angle = 45, hjust = 1, size = 5)) + 
scale_fill_manual(values = col_vector)
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_Pt1/Figures/16S_Taxon_barplot_t2.pdf")

#t3
phylumGlommed_herb_t3 <- merge_samples(subset_samples(physeq= phylumGlommed, Time=="T3"), group = "Herbicide")
phylumGlommed_herb_t3 <- transform_sample_counts(phylumGlommed_herb_t3, function(OTU) OTU/sum(OTU))
sample_data(phylumGlommed_herb_t3)$Herbicide <- factor(sample_data(phylumGlommed_herb_t3)$Herbicide, levels = c(1, 2, 3, 4, 5), 
       labels = c("Non-Treated", "Hand", "Aatrex", "Clarity", "Roundup Powermax"))

plot_bar(phylumGlommed_herb_t3, x = "Herbicide", fill = "Phylum")  + theme_classic() + ggtitle("Proportional Taxon Abundances Time 1") +
theme(legend.position="bottom") + guides(fill=guide_legend(nrow=6)) + geom_bar(stat="identity") + theme(axis.text.x=element_text(angle = 45, hjust = 1, size = 5)) + 
scale_fill_manual(values = col_vector)
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_Pt1/Figures/16S_Taxon_barplot_t3.pdf")

Combined herbicide and time bar plot for exploration

sample_data(ps_rare)$herb_time<-paste(sample_data(ps_rare)$Herbicide, sample_data(ps_rare)$Time, sep = "_")
ps_rare_for_barplot <- prune_taxa(taxa_sums(ps_rare) > 50, ps_rare)
plot_bar(ps_rare_for_barplot, x= "herb_time", fill = "Family") + scale_fill_manual(values = col_vector) + geom_bar(stat="identity")
ggsave("/Users/gordoncuster/Desktop/Git_Projects/Herbicide_Microbes_PT1/Figures/16S_BarPlot_Herbicide_Time.pdf", width = 20, height = 11)

Linear modeling of abundant taxa

<<<<<<< HEAD

Tax_glom_Subset <- function (physeq, y = "taxLevel", nreturns = "Number of returns"){
   ps_1<- tax_glom(ps_rare_sub, taxrank = y )
    myTaxa <- names(sort(taxa_sums(ps_1), decreasing = TRUE)[1:nreturns])
       ps_1_sub <- prune_taxa(myTaxa, ps_1)
  return(ps_1_sub)
}

ps_rare_family_top25<-Tax_glom_Subset(physeq = ps_rare, nreturns = 25, y = "Family")

#explore top 25 taxa with plot bar
plot_bar(ps_rare_family_top25, x= "herb_time", fill = "Family") + scale_fill_manual(values = col_vector) + geom_bar(stat="identity")



#write function to wrangle data prior to anova

abund_aov_wrangle <- function (physeq, y = "Tax_Level"){
  tax<-tax_table(physeq)[,y]
   meta<-data.frame(sample_data(physeq))
  counts<-data.frame(otu_table(physeq))
  rownames(counts) <- tax[,1]
  counts<-data.frame(t(counts))
   counts$Time <- meta$Time 
   counts$Herbicide <- meta$Herbicide 
  counts$Herb_time <- meta$herb_time 
  return(counts)
}            

test<-abund_aov_wrangle(ps_rare_family_top25, y = "Family")


mod_abund<-function(count_tab, DV = "Independent Variable") {
  for (i in 3:ncol(count_tab)-2) {
    for(j in 1:length(unique(count_tab[,"Herbicide"]))){
      data <- count_tab %>% filter(Herbicide == unique(count_tab$Herbicide[j]))
      mod <- aov(unlist(data[1]) ~ matrix(data[,DV])) 
              if(summary(mod)[[1]][["Pr(>F)"]][1] <= 0.05) {
                  data <- count_tab %>% filter(Herbicide == unique(count_tab$Herbicide[j]))
   #return(boxplot(unlist(data[1]) ~ matrix(data[,DV]), main =  paste(names(data[1])), xlab= "Time", ylab="Abundance")
    #      )
print(boxplot(unlist(data[1]) ~ matrix(data[,DV]), main =paste(names(data[i]), as.character(unique(count_tab[,"Herbicide"]))[j]), xlab= "Time", ylab="Abundance") )
      
      } 
    }
  }
}



mod_abund(count_tab = test, DV = "Time")  
$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

$stats
     [,1] [,2] [,3]
[1,] 22.0   23 38.0
[2,] 26.0   33 40.0
[3,] 32.0   38 47.0
[4,] 44.5   46 67.5
[5,] 61.0   60 73.0

$n
[1] 12 11 11

$conf
         [,1]     [,2]     [,3]
[1,] 23.56203 31.80696 33.89933
[2,] 40.43797 44.19304 60.10067

$out
f.Micrococcaceae33 
               141 

$group
[1] 3

$names
[1] "T1" "T2" "T3"

=======
mod_abund(counts = test, DV = "Time", Grouping = "Herbicide" )  
Error in `[.data.frame`(counts, counts[, Grouping[i]] == as.character(unique(counts[,  : 
  object 'j' not found
>>>>>>> ffc19d2ebb63579760114dd25310f43274e1e231
LS0tCnRpdGxlOiAiSGVyYlB0MSAxNlMgRmlndXJlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnJlcXVpcmUocGh5bG9zZXEpCnJlcXVpcmUodGlkeXZlcnNlKQpyZXF1aXJlKHBoeWxvc2VxKQpyZXF1aXJlKHJlc2hhcGUyKQpyZXF1aXJlKGRwbHlyKQpyZXF1aXJlKGdncGxvdDIpCmBgYAoKTG9hZCBkYXRhCmBgYHtyfQpwc19kbW4gPC0gcmVhZFJEUygiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL2RhdGEvUGh5bG9zZXFPYmplY3RzLzE2Uy9ETU5fZXN0c18xNlMuUmRhdGEiKQpzYW1wbGVfZGF0YShwc19kbW4pJEhlcmJpY2lkZSA8LSBmYWN0b3Ioc2FtcGxlX2RhdGEocHNfZG1uKSRIZXJiaWNpZGUsIGxldmVscyA9IGMoIk5vbi1UcmVhdGVkIiwgIkhhbmQiLCAiQWF0cmV4IiwgIkNsYXJpdHkiLCAiUm91bmR1cCBQb3dlcm1heCIpKQpzYW1wbGVfZGF0YShwc19kbW4pJGhlcmJfdGltZTwtcGFzdGUoc2FtcGxlX2RhdGEocHNfZG1uKSRIZXJiaWNpZGUsIHNhbXBsZV9kYXRhKHBzX2RtbikkVGltZSwgc2VwID0gIl8iKQpwc19yYXJlIDwtIHJlYWRSRFMoIi9Vc2Vycy9nb3Jkb25jdXN0ZXIvRGVza3RvcC9HaXRfUHJvamVjdHMvSGVyYmljaWRlX01pY3JvYmVzX1BUMS9kYXRhL1BoeWxvc2VxT2JqZWN0cy8xNlMvSGVyYlB0MV9yYXJlXzE2Uy5SZGF0YSIpCnNhbXBsZV9kYXRhKHBzX3JhcmUpJEhlcmJpY2lkZSA8LSBmYWN0b3Ioc2FtcGxlX2RhdGEocHNfcmFyZSkkSGVyYmljaWRlLCBsZXZlbHMgPSBjKCJOb24tVHJlYXRlZCIsICJIYW5kIiwgIkFhdHJleCIsICJDbGFyaXR5IiwgIlJvdW5kdXAgUG93ZXJtYXgiKSkKc2FtcGxlX2RhdGEocHNfcmFyZSkkaGVyYl90aW1lPC1wYXN0ZShzYW1wbGVfZGF0YShwc19yYXJlKSRIZXJiaWNpZGUsIHNhbXBsZV9kYXRhKHBzX3JhcmUpJFRpbWUsIHNlcCA9ICJfIikKcHNfdHJhbnMgPC0gcmVhZFJEUygiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL2RhdGEvUGh5bG9zZXFPYmplY3RzLzE2Uy9IZXJiUHQxX2hlbF90cmFuc18xNlMuUmRhdGEiKQpzYW1wbGVfZGF0YShwc190cmFucykkSGVyYmljaWRlIDwtIGZhY3RvcihzYW1wbGVfZGF0YShwc190cmFucykkSGVyYmljaWRlLCBsZXZlbHMgPSBjKCJOb24tVHJlYXRlZCIsICJIYW5kIiwgIkFhdHJleCIsICJDbGFyaXR5IiwgIlJvdW5kdXAgUG93ZXJtYXgiKSkKc2FtcGxlX2RhdGEocHNfdHJhbnMpJGhlcmJfdGltZTwtcGFzdGUoc2FtcGxlX2RhdGEocHNfdHJhbnMpJEhlcmJpY2lkZSwgc2FtcGxlX2RhdGEocHNfdHJhbnMpJFRpbWUsIHNlcCA9ICJfIikKYGBgCgpjcmVhdGUgYWxwaGFkaXZlcnNpdHkgdGFibGVzCmBgYHtyfQphbHBoYV9kaXYgPC0gZXN0aW1hdGVfcmljaG5lc3MocGh5c2VxID0gcHNfcmFyZSwgbWVhc3VyZXMgPSBjKCJPYnNlcnZlZCIsICJTaGFubm9uIiwgIkNoYW8xIikpCiNwdWxsIG91dCBtZXRhZGF0YSBhbmQgY29uY2F0b25hdGUgd2l0aCBhbHBoYSBkaXZlcnNpdHkgbWV0cmljcwptZDwtZGF0YS5mcmFtZShzYW1wbGVfZGF0YShwc19yYXJlKSkKYWxwaGFfZGl2X21kIDwtIHJvd25hbWVzX3RvX2NvbHVtbihhbHBoYV9kaXYsICJCYXJjb2RlX0lEX0ciKSAlPiUgZnVsbF9qb2luKG1kKSAKYWxwaGFfZGl2X21kJEhlcmJpY2lkZSA8LSBmYWN0b3IoYWxwaGFfZGl2X21kJEhlcmJpY2lkZSwgbGV2ZWxzID0gYygiTm9uLVRyZWF0ZWQiLCAiSGFuZCIsICJBYXRyZXgiLCAiQ2xhcml0eSIsICJSb3VuZHVwIFBvd2VybWF4IikpCmBgYAoKU2hhbm5vbiBEaXYgcGxvdHMgLSBubyBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBhbW9uZyBoZXJiaWNpZGUgdHJlYXRtZW50cyBhdCBhbnkgb2YgdGhlIHRocmVlIHRpbWUgcG9pbnRzCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGFscGhhX2Rpdl9tZCwgYWVzKEhlcmJpY2lkZSwgU2hhbm5vbiwgY29sb3I9IEhlcmJpY2lkZSkpICsgZmFjZXRfZ3JpZCguIH4gVGltZSkgKyBnZW9tX2JveHBsb3QoKSArIHRoZW1lX2NsYXNzaWMoKSArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkgKQoKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfU2hhbm5vbi5wZGYiKQoKYW92X3QxPC1hb3YoU2hhbm5vbiB+IEhlcmJpY2lkZSwgZGF0YSA9IGFscGhhX2Rpdl9tZFthbHBoYV9kaXZfbWQkVGltZSA9PSAiVDEiLF0pCnBsb3QoYW92X3QxJHJlc2lkdWFscykKc3VtbWFyeShhb3ZfdDEpCgphb3ZfdDI8LWFvdihTaGFubm9uIH4gSGVyYmljaWRlLCBkYXRhID0gYWxwaGFfZGl2X21kW2FscGhhX2Rpdl9tZCRUaW1lID09ICJUMiIsXSkKcGxvdChhb3ZfdDIkcmVzaWR1YWxzKQpzdW1tYXJ5KGFvdl90MikKCmFvdl90MzwtYW92KFNoYW5ub24gfiBIZXJiaWNpZGUsIGRhdGEgPSBhbHBoYV9kaXZfbWRbYWxwaGFfZGl2X21kJFRpbWUgPT0gIlQzIixdKQpwbG90KGFvdl90MyRyZXNpZHVhbHMpCnN1bW1hcnkoYW92X3QzKQpgYGAKCm9yZGluYXRpb25zIGFuZCBhZG9uaXMgdGVzdGluZyB3aXRoIHRocmVlIHNlcGFyYXRlIG9iamVjdHMgKGkuZS4sIGRtbiwgcmFyZWZpZWQsIHRyYW5zZm9ybWVkKS4gUmFyZSB0YXhhIGFyZSByZW1vdmVkIGZyb20gcmFyZWZpZWQgYW5kIHRyYW5zZm9tcmVkIHRvIHN1Y2Vzc2Z1bGx5IG9yZGluYXRlLiBBdCB0aGlzIHBvaW50LCB0aGUgdHJhbnNmb3JtZWQgZGF0YSB3aWxsIG5vdCBvcmRpbmF0ZS4gCmBgYHtyfQpvcmRfZG1uPC1vcmRpbmF0ZShwaHlzZXEgPSBwc19kbW4sIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsIGs9MywgdHJ5bWF4PSAzMDAsIG1heGl0PTEwMDApCgpwc19yYXJlX3N1YjwtcHJ1bmVfdGF4YSh0YXhhX3N1bXMocHNfcmFyZSkgPiAyLCBwc19yYXJlKQpvcmRfcmFyZTwtb3JkaW5hdGUocGh5c2VxID0gcHNfcmFyZV9zdWIsIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsIGs9MywgdHJ5bWF4PSAzMDAsIG1heGl0PTEwMDApCgpwc190cmFuc19zdWI8LXBydW5lX3RheGEodGF4YV9zdW1zKHBzX3RyYW5zKSA+IDAuMDUsIHBzX3RyYW5zKQpvcmRfdHJhbnNmb3JtZWQ8LW9yZGluYXRlKHBoeXNlcSA9IHBzX3RyYW5zX3N1YiwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5IiwgdHJ5bWF4PSAzMDAsIG1heGl0PTEwMDApCmBgYAoKQWRvbmlzIHRlc3Rpbmcgb2YgaGVyYmljaWRlIHRyZWF0bWVudHMgYnkgdGltZSBwb2ludApgYGB7cn0KcHNfYWRvbmlzPC1mdW5jdGlvbihwaHlzZXEpewogIG90dV90YWI8LWRhdGEuZnJhbWUocGh5bG9zZXE6Om90dV90YWJsZShwaHlzZXEpKQogIG1kX3RhYjwtZGF0YS5mcmFtZShwaHlsb3NlcTo6c2FtcGxlX2RhdGEocGh5c2VxKSkKICAgIGlmKHRheGFfYXJlX3Jvd3MocGh5c2VxKT09IFQpewogICAgICAgcGh5c2VxX2Rpc3Q8LXBhcmFsbGVsRGlzdDo6cGFyRGlzdChhcy5tYXRyaXgodChvdHVfdGFiKSksIG1ldGhvZCA9ICJicmF5Iil9CiAgICAgICAgICAgIGVsc2V7cGh5c2VxX2Rpc3Q8LXBhcmFsbGVsRGlzdDo6cGFyRGlzdChhcy5tYXRyaXgob3R1X3RhYiksIG1ldGhvZCA9ICJicmF5Iil9CiAgcHJpbnQoYW5vdmEodmVnYW46OmJldGFkaXNwZXIocGh5c2VxX2Rpc3QsIG1kX3RhYiRIZXJiaWNpZGUpKSkKICB2ZWdhbjo6YWRvbmlzKHBoeXNlcV9kaXN0IH4gSGVyYmljaWRlICogVGltZSwgZGF0YSA9IG1kX3RhYiwgcGVybXV0YXRpb25zID0gMTAwKQp9CmBgYAoKYGBge3J9CnBzX2Fkb25pcyhwc19yYXJlX3N1YikKcHNfYWRvbmlzKHBzX3RyYW5zX3N1YikKcHNfYWRvbmlzKHBzX2RtbikKYGBgCgpPcmRpbmF0aW9uIHBsb3RzIERNTgpgYGB7cn0Kb3JkX3QxX2Rtbjwtb3JkaW5hdGUocGh5c2VxID0gc3Vic2V0X3NhbXBsZXMocHNfZG1uLCBUaW1lPT0iVDEiKSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5Iiwgaz0zLCB0cnltYXg9IDEwMCkKVDFfZG1uPC1nZ29yZGlwbG90czo6Z2dfb3JkaXBsb3Qob3JkID0gb3JkX3QxX2RtbiwgZ3JvdXBzID0gZGF0YS5mcmFtZShzYW1wbGVfZGF0YShzdWJzZXRfc2FtcGxlcyhwc19kbW4sIFRpbWUgPT0gIlQxIikpKSRIZXJiaWNpZGUsIGNob2ljZXMgPSBjKDEsIDIpLCBraW5kID0gYygic2UiKSwgY29uZiA9IDAuOTUsIHNob3cuZ3JvdXBzID0gImFsbCIsIGVsbGlwc2UgPSBUUlVFLCBsYWJlbCA9IEZBTFNFLCBodWxsID0gRkFMU0UsIHNwaWRlcnMgPSBGQUxTRSwgcGxvdCA9IFRSVUUsIHB0LnNpemUgPSAxKQpUMV9kbW4kcGxvdCArIHRoZW1lX2NsYXNzaWMoKQoKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfb3JkaW5hdGlvbl9kbW5fVDEucGRmIikKCm9yZF90Ml9kbW48LW9yZGluYXRlKHBoeXNlcSA9IHN1YnNldF9zYW1wbGVzKHBzX2RtbiwgVGltZT09IlQyIiksIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsIGs9MywgdHJ5bWF4PSAxMDApClQyX2RtbjwtZ2dvcmRpcGxvdHM6OmdnX29yZGlwbG90KG9yZCA9IG9yZF90Ml9kbW4sIGdyb3VwcyA9IGRhdGEuZnJhbWUoc2FtcGxlX2RhdGEoc3Vic2V0X3NhbXBsZXMocHNfZG1uLCBUaW1lID09ICJUMiIpKSkkSGVyYmljaWRlLCBjaG9pY2VzID0gYygxLCAyKSwga2luZCA9IGMoInNlIiksIGNvbmYgPSAwLjk1LCBzaG93Lmdyb3VwcyA9ICJhbGwiLCBlbGxpcHNlID0gVFJVRSwgbGFiZWwgPSBGQUxTRSwgaHVsbCA9IEZBTFNFLCBzcGlkZXJzID0gRkFMU0UsIHBsb3QgPSBUUlVFLCBwdC5zaXplID0gMSkKVDJfZG1uJHBsb3QgKyB0aGVtZV9jbGFzc2ljKCkKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfb3JkaW5hdGlvbl9kbW5fVDIucGRmIikKCgpvcmRfdDNfZG1uPC1vcmRpbmF0ZShwaHlzZXEgPSBzdWJzZXRfc2FtcGxlcyhwc19kbW4sIFRpbWU9PSJUMyIpLCBtZXRob2QgPSAiTk1EUyIsIGRpc3RhbmNlID0gImJyYXkiLCBrPTMsIHRyeW1heD0gMTAwKQpUM19kbW48LWdnb3JkaXBsb3RzOjpnZ19vcmRpcGxvdChvcmQgPSBvcmRfdDNfZG1uLCBncm91cHMgPSBkYXRhLmZyYW1lKHNhbXBsZV9kYXRhKHN1YnNldF9zYW1wbGVzKHBzX2RtbiwgVGltZSA9PSAiVDMiKSkpJEhlcmJpY2lkZSwgY2hvaWNlcyA9IGMoMSwgMiksIGtpbmQgPSBjKCJzZSIpLCBjb25mID0gMC45NSwgc2hvdy5ncm91cHMgPSAiYWxsIiwgZWxsaXBzZSA9IFRSVUUsIGxhYmVsID0gRkFMU0UsIGh1bGwgPSBGQUxTRSwgc3BpZGVycyA9IEZBTFNFLCBwbG90ID0gVFJVRSwgcHQuc2l6ZSA9IDEpClQzX2RtbiRwbG90ICsgdGhlbWVfY2xhc3NpYygpCmdnc2F2ZSgiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL0ZpZ3VyZXMvMTZTX29yZGluYXRpb25fZG1uX1QzLnBkZiIpCmBgYAoKT3JkaW5hdGlvbiBwbG90cyByYXJlZmllZApgYGB7cn0Kb3JkX3QxX3JhcmU8LW9yZGluYXRlKHBoeXNlcSA9IHN1YnNldF9zYW1wbGVzKHBzX3JhcmUsIFRpbWU9PSJUMSIpLCBtZXRob2QgPSAiTk1EUyIsIGRpc3RhbmNlID0gImJyYXkiLCBrPTMsIHRyeW1heD0gMTAwKQpUMV9yYXJlPC1nZ29yZGlwbG90czo6Z2dfb3JkaXBsb3Qob3JkID0gb3JkX3QxX3JhcmUsIGdyb3VwcyA9IGRhdGEuZnJhbWUoc2FtcGxlX2RhdGEoc3Vic2V0X3NhbXBsZXMocHNfcmFyZSwgVGltZSA9PSAiVDEiKSkpJEhlcmJpY2lkZSwgY2hvaWNlcyA9IGMoMSwgMiksIGtpbmQgPSBjKCJzZSIpLCBjb25mID0gMC45NSwgc2hvdy5ncm91cHMgPSAiYWxsIiwgZWxsaXBzZSA9IFRSVUUsIGxhYmVsID0gRkFMU0UsIGh1bGwgPSBGQUxTRSwgc3BpZGVycyA9IEZBTFNFLCBwbG90ID0gVFJVRSwgcHQuc2l6ZSA9IDEpClQxX3JhcmUkcGxvdCArIHRoZW1lX2NsYXNzaWMoKQoKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfb3JkaW5hdGlvbl9yYXJlX1QxLnBkZiIpCgpvcmRfdDJfcmFyZTwtb3JkaW5hdGUocGh5c2VxID0gc3Vic2V0X3NhbXBsZXMocHNfcmFyZSwgVGltZT09IlQyIiksIG1ldGhvZCA9ICJOTURTIiwgZGlzdGFuY2UgPSAiYnJheSIsIGs9MywgdHJ5bWF4PSAxMDApClQyX3JhcmU8LWdnb3JkaXBsb3RzOjpnZ19vcmRpcGxvdChvcmQgPSBvcmRfdDJfcmFyZSwgZ3JvdXBzID0gZGF0YS5mcmFtZShzYW1wbGVfZGF0YShzdWJzZXRfc2FtcGxlcyhwc19yYXJlLCBUaW1lID09ICJUMiIpKSkkSGVyYmljaWRlLCBjaG9pY2VzID0gYygxLCAyKSwga2luZCA9IGMoInNlIiksIGNvbmYgPSAwLjk1LCBzaG93Lmdyb3VwcyA9ICJhbGwiLCBlbGxpcHNlID0gVFJVRSwgbGFiZWwgPSBGQUxTRSwgaHVsbCA9IEZBTFNFLCBzcGlkZXJzID0gRkFMU0UsIHBsb3QgPSBUUlVFLCBwdC5zaXplID0gMSkKVDJfcmFyZSRwbG90ICsgdGhlbWVfY2xhc3NpYygpCmdnc2F2ZSgiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL0ZpZ3VyZXMvMTZTX29yZGluYXRpb25fcmFyZV9UMi5wZGYiKQoKCm9yZF90M19yYXJlPC1vcmRpbmF0ZShwaHlzZXEgPSBzdWJzZXRfc2FtcGxlcyhwc19yYXJlLCBUaW1lPT0iVDMiKSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5Iiwgaz0zLCB0cnltYXg9IDEwMCkKVDNfcmFyZTwtZ2dvcmRpcGxvdHM6OmdnX29yZGlwbG90KG9yZCA9IG9yZF90M19yYXJlLCBncm91cHMgPSBkYXRhLmZyYW1lKHNhbXBsZV9kYXRhKHN1YnNldF9zYW1wbGVzKHBzX3JhcmUsIFRpbWUgPT0gIlQzIikpKSRIZXJiaWNpZGUsIGNob2ljZXMgPSBjKDEsIDIpLCBraW5kID0gYygic2UiKSwgY29uZiA9IDAuOTUsIHNob3cuZ3JvdXBzID0gImFsbCIsIGVsbGlwc2UgPSBUUlVFLCBsYWJlbCA9IEZBTFNFLCBodWxsID0gRkFMU0UsIHNwaWRlcnMgPSBGQUxTRSwgcGxvdCA9IFRSVUUsIHB0LnNpemUgPSAxKQpUM19yYXJlJHBsb3QgKyB0aGVtZV9jbGFzc2ljKCkKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfb3JkaW5hdGlvbl9yYXJlX1QzLnBkZiIpCmBgYApib3ggYW5kIHdoaXNrZXIgcGxvdHMgb2YgZGlzdGFuY2UgCndpdGhpbiBncm91cCBkaXN0YW5jZXMKYGBge3J9CmxpYnJhcnkobWljclVCSWZ1bnMpCmJldGFfYm94cGxvdChwaHlzZXEgPSBzdWJzZXRfc2FtcGxlcyhwc19yYXJlLCBUaW1lPT0iVDEiKSwgbWV0aG9kID0gImJyYXkiLCBncm91cCA9ICJIZXJiaWNpZGUiKQpnZ3NhdmUoIi9Vc2Vycy9nb3Jkb25jdXN0ZXIvRGVza3RvcC9HaXRfUHJvamVjdHMvSGVyYmljaWRlX01pY3JvYmVzX1BUMS9GaWd1cmVzLzE2U19UMV9yYXJlX3dpdGhpbmdyb3VwX2JldGEucGRmIikKYmV0YV9ib3hwbG90KHBoeXNlcSA9IHN1YnNldF9zYW1wbGVzKHBzX3JhcmUsIFRpbWU9PSJUMiIpLCBtZXRob2QgPSAiYnJheSIsIGdyb3VwID0gIkhlcmJpY2lkZSIpCmdnc2F2ZSgiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL0ZpZ3VyZXMvMTZTX1QyX3JhcmVfd2l0aGluZ3JvdXBfYmV0YS5wZGYiKQpiZXRhX2JveHBsb3QocGh5c2VxID0gc3Vic2V0X3NhbXBsZXMocHNfcmFyZSwgVGltZT09IlQzIiksIG1ldGhvZCA9ICJicmF5IiwgZ3JvdXAgPSAiSGVyYmljaWRlIikKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfVDNfcmFyZV93aXRoaW5ncm91cF9iZXRhLnBkZiIpCmBgYAoKdHJlYXRtZW50IHRvIGNvbnRyb2wgCmBgYHtyfQpwbG90RGlzdGFuY2VzID0gZnVuY3Rpb24ocCwgbSwgcywgZCkgewoKICAjIGNhbGMgZGlzdGFuY2VzCiAgd3UgPSBwaHlsb3NlcTo6ZGlzdGFuY2UocCwgbSkKICB3dS5tID0gbWVsdChhcy5tYXRyaXgod3UpKQogIAogICMgcmVtb3ZlIHNlbGYtY29tcGFyaXNvbnMKICB3dS5tID0gd3UubSAlPiUKICAgIGZpbHRlcihhcy5jaGFyYWN0ZXIoVmFyMSkgIT0gYXMuY2hhcmFjdGVyKFZhcjIpKSAlPiUKICAgIG11dGF0ZV9pZihpcy5mYWN0b3IsYXMuY2hhcmFjdGVyKQogIAogICMgZ2V0IHNhbXBsZSBkYXRhIChTNCBlcnJvciBPSyBhbmQgZXhwZWN0ZWQpCiAgc2QgPSBkYXRhLmZyYW1lKHNhbXBsZV9kYXRhKHApKSAlPiUKICAgIHNlbGVjdChzLCBkKSAlPiUKICAgIG11dGF0ZV9pZihpcy5mYWN0b3IsYXMuY2hhcmFjdGVyKQogIHNkJEhlcmJpY2lkZSA8LSBmYWN0b3Ioc2QkSGVyYmljaWRlLCBsZXZlbHMgPSBjKCJOb24tVHJlYXRlZCIsICJIYW5kIiwgIkFhdHJleCIsICJDbGFyaXR5IiwgIlJvdW5kdXAgUG93ZXJtYXgiKSkKICAKICAjIGNvbWJpbmVkIGRpc3RhbmNlcyB3aXRoIHNhbXBsZSBkYXRhCiAgY29sbmFtZXMoc2QpID0gYygiVmFyMSIsICJUeXBlMSIpCiAgd3Uuc2QgPSBsZWZ0X2pvaW4od3UubSwgc2QsIGJ5ID0gIlZhcjEiKQogIAogIGNvbG5hbWVzKHNkKSA9IGMoIlZhcjIiLCAiVHlwZTIiKQogIHd1LnNkID0gbGVmdF9qb2luKHd1LnNkLCBzZCwgYnkgPSAiVmFyMiIpCiAgCiAgI3JlbW92ZSB0aGlzIGxpbmUgdG8gcGxvdCBhbGwgY29tcGFyaXNvbnMuIAogIHd1LnNkID0gd3Uuc2QgJT4lIGZpbHRlcihUeXBlMSA9PSAiSGFuZCIgfCBUeXBlMSA9PSAiTm9uLVRyZWF0ZWQiKQogIAogICMgcGxvdAogIGdncGxvdCh3dS5zZCwgYWVzKHggPSBUeXBlMiwgeSA9IHZhbHVlKSkgKwogICAgdGhlbWVfYncoKSArCiAgICBnZW9tX3BvaW50KCkgKwogICAgZ2VvbV9ib3hwbG90KGFlcyhjb2xvciA9IGlmZWxzZShUeXBlMSA9PSBUeXBlMiwgInJlZCIsICJibGFjayIpKSkgKwogICAgc2NhbGVfY29sb3JfaWRlbnRpdHkoKSArCiAgICBmYWNldF93cmFwKH4gVHlwZTEsIHNjYWxlcyA9ICJmcmVlX3giKSArCiAgICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCBzaXplID0gNSkpICsgCiAgICBnZ3RpdGxlKHBhc3RlMCgiRGlzdGFuY2UgTWV0cmljID0gIiwgbSkpCiAgCn0KYGBgCgoKYGBge3J9CmE8LXBsb3REaXN0YW5jZXMocCA9IHN1YnNldF9zYW1wbGVzKHBoeXNlcT0gcHNfcmFyZSwgVGltZT09IlQxIiksIG0gPSAiYnJheSIsIHMgPSAiQmFyY29kZV9JRF9HIiwgZCA9ICJIZXJiaWNpZGUiKQphIDwtIGEgKyBnZ3RpdGxlKCJUaW1lIDEgQnJheS1DdXJ0aXMgRGlzc2ltbGFyaXRpZXMiKQpnZ3NhdmUoIi9Vc2Vycy9nb3Jkb25jdXN0ZXIvRGVza3RvcC9HaXRfUHJvamVjdHMvSGVyYmljaWRlX01pY3JvYmVzX1BUMS9GaWd1cmVzLzE2U19UMV9yYXJlX2FsbGdyb3VwX2JldGEucGRmIikKYjwtcGxvdERpc3RhbmNlcyhwID0gc3Vic2V0X3NhbXBsZXMocGh5c2VxPSBwc19yYXJlLCBUaW1lPT0iVDIiKSwgbSA9ICJicmF5IiwgcyA9ICJCYXJjb2RlX0lEX0ciLCBkID0gIkhlcmJpY2lkZSIpCmIgPC1iICsgZ2d0aXRsZSgiVGltZSAyIEJyYXktQ3VydGlzIERpc3NpbWxhcml0aWVzIikKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfVDJfcmFyZV9hbGxncm91cF9iZXRhLnBkZiIpCmM8LXBsb3REaXN0YW5jZXMocCA9IHN1YnNldF9zYW1wbGVzKHBoeXNlcT0gcHNfcmFyZSwgVGltZT09IlQzIiksIG0gPSAiYnJheSIsIHMgPSAiQmFyY29kZV9JRF9HIiwgZCA9ICJIZXJiaWNpZGUiKQpjPC0gYyArIGdndGl0bGUoIlRpbWUgMyBCcmF5LUN1cnRpcyBEaXNzaW1sYXJpdGllcyIpCmdnc2F2ZSgiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUFQxL0ZpZ3VyZXMvMTZTX1QzX3JhcmVfYWxsZ3JvdXBfYmV0YS5wZGYiKQoKbGlicmFyeShnZ3B1YnIpCmdnYXJyYW5nZShhLCBiLCBjLCBuY29sID0gMSkKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QVDEvRmlndXJlcy8xNlNfY29tYmluZWRfcmFyZV9hbGxncm91cF9iZXRhLnBkZiIsIHdpZHRoID0gNywgaGVpZ2h0ID0gMTApCmBgYApUYXhvbiBhYnVuZGFuY2UgYmFyIHBsb3QKCmBgYHtyfQojY3JlYXRlIHN1cGVyIGxvbmcgY29sb3IgdmVjdG9yCmNvbF92ZWN0b3IgPC0gYygiIzAwMDAwMCIsICIjRkZGRjAwIiwgIiMxQ0U2RkYiLCAiI0ZGMzRGRiIsICIjRkY0QTQ2IiwgIiMwMDg5NDEiLCAiIzAwNkZBNiIsICIjQTMwMDU5IiwKICAgICAgICAiI0ZGREJFNSIsICIjN0E0OTAwIiwgIiMwMDAwQTYiLCAiIzYzRkZBQyIsICIjQjc5NzYyIiwgIiMwMDRENDMiLCAiIzhGQjBGRiIsICIjOTk3RDg3IiwKICAgICAgICAiIzVBMDAwNyIsICIjODA5NjkzIiwgIiNGRUZGRTYiLCAiIzFCNDQwMCIsICIjNEZDNjAxIiwgIiMzQjVERkYiLCAiIzRBM0I1MyIsICIjRkYyRjgwIiwKICAgICAgICAiIzYxNjE1QSIsICIjQkEwOTAwIiwgIiM2Qjc5MDAiLCAiIzAwQzJBMCIsICIjRkZBQTkyIiwgIiNGRjkwQzkiLCAiI0I5MDNBQSIsICIjRDE2MTAwIiwKICAgICAgICAiI0RERUZGRiIsICIjMDAwMDM1IiwgIiM3QjRGNEIiLCAiI0ExQzI5OSIsICIjMzAwMDE4IiwgIiMwQUE2RDgiLCAiIzAxMzM0OSIsICIjMDA4NDZGIiwKICAgICAgICAiIzM3MjEwMSIsICIjRkZCNTAwIiwgIiNDMkZGRUQiLCAiI0EwNzlCRiIsICIjQ0MwNzQ0IiwgIiNDMEI5QjIiLCAiI0MyRkY5OSIsICIjMDAxRTA5IiwKICAgICAgICAiIzAwNDg5QyIsICIjNkYwMDYyIiwgIiMwQ0JENjYiLCAiI0VFQzNGRiIsICIjNDU2RDc1IiwgIiNCNzdCNjgiLCAiIzdBODdBMSIsICIjNzg4RDY2IiwKICAgICAgICAiIzg4NTU3OCIsICIjRkFEMDlGIiwgIiNGRjhBOUEiLCAiI0QxNTdBMCIsICIjQkVDNDU5IiwgIiM0NTY2NDgiLCAiIzAwODZFRCIsICIjODg2RjRDIiwKICAgICAgICAKICAgICAgICAiIzM0MzYyRCIsICIjQjRBOEJEIiwgIiMwMEE2QUEiLCAiIzQ1MkMyQyIsICIjNjM2Mzc1IiwgIiNBM0M4QzkiLCAiI0ZGOTEzRiIsICIjOTM4QTgxIiwKICAgICAgICAiIzU3NTMyOSIsICIjMDBGRUNGIiwgIiNCMDVCNkYiLCAiIzhDRDBGRiIsICIjM0I5NzAwIiwgIiMwNEY3NTciLCAiI0M4QTFBMSIsICIjMUU2RTAwIiwKICAgICAgICAiIzc5MDBENyIsICIjQTc3NTAwIiwgIiM2MzY3QTkiLCAiI0EwNTgzNyIsICIjNkIwMDJDIiwgIiM3NzI2MDAiLCAiI0Q3OTBGRiIsICIjOUI5NzAwIiwKICAgICAgICAiIzU0OUU3OSIsICIjRkZGNjlGIiwgIiMyMDE2MjUiLCAiIzcyNDE4RiIsICIjQkMyM0ZGIiwgIiM5OUFEQzAiLCAiIzNBMjQ2NSIsICIjOTIyMzI5IiwKICAgICAgICAiIzVCNDUzNCIsICIjRkRFOERDIiwgIiM0MDRFNTUiLCAiIzAwODlBMyIsICIjQ0I3RTk4IiwgIiNBNEU4MDQiLCAiIzMyNEU3MiIsICIjNkEzQTRDIiwKICAgICAgICAiIzgzQUI1OCIsICIjMDAxQzFFIiwgIiNEMUY3Q0UiLCAiIzAwNEIyOCIsICIjQzhEMEY2IiwgIiNBM0E0ODkiLCAiIzgwNkM2NiIsICIjMjIyODAwIiwKICAgICAgICAiI0JGNTY1MCIsICIjRTgzMDAwIiwgIiM2Njc5NkQiLCAiI0RBMDA3QyIsICIjRkYxQTU5IiwgIiM4QURCQjQiLCAiIzFFMDIwMCIsICIjNUI0RTUxIiwKICAgICAgICAiI0M4OTVDNSIsICIjMzIwMDMzIiwgIiNGRjY4MzIiLCAiIzY2RTFEMyIsICIjQ0ZDREFDIiwgIiNEMEFDOTQiLCAiIzdFRDM3OSIsICIjMDEyQzU4IiwKICAgICAgICAKICAgICAgICAiIzdBN0JGRiIsICIjRDY4RTAxIiwgIiMzNTMzMzkiLCAiIzc4QUZBMSIsICIjRkVCMkM2IiwgIiM3NTc5N0MiLCAiIzgzNzM5MyIsICIjOTQzQTREIiwKICAgICAgICAiI0I1RjRGRiIsICIjRDJEQ0Q1IiwgIiM5NTU2QkQiLCAiIzZBNzE0QSIsICIjMDAxMzI1IiwgIiMwMjUyNUYiLCAiIzBBQTNGNyIsICIjRTk4MTc2IiwKICAgICAgICAiI0RCRDVERCIsICIjNUVCQ0QxIiwgIiMzRDRGNDQiLCAiIzdFNjQwNSIsICIjMDI2ODRFIiwgIiM5NjJCNzUiLCAiIzhEODU0NiIsICIjOTY5NUM1IiwKICAgICAgICAiI0U3NzNDRSIsICIjRDg2QTc4IiwgIiMzRTg5QkUiLCAiI0NBODM0RSIsICIjNTE4QTg3IiwgIiM1QjExM0MiLCAiIzU1ODEzQiIsICIjRTcwNEM0IiwKICAgICAgICAiIzAwMDA1RiIsICIjQTk3Mzk5IiwgIiM0QjgxNjAiLCAiIzU5NzM4QSIsICIjRkY1REE3IiwgIiNGN0M5QkYiLCAiIzY0MzEyNyIsICIjNTEzQTAxIiwKICAgICAgICAiIzZCOTRBQSIsICIjNTFBMDU4IiwgIiNBNDVCMDIiLCAiIzFEMTcwMiIsICIjRTIwMDI3IiwgIiNFN0FCNjMiLCAiIzRDNjAwMSIsICIjOUM2OTY2IiwKICAgICAgICAiIzY0NTQ3QiIsICIjOTc5NzlFIiwgIiMwMDZBNjYiLCAiIzM5MTQwNiIsICIjRjRENzQ5IiwgIiMwMDQ1RDIiLCAiIzAwNkMzMSIsICIjRERCNkQwIiwKICAgICAgICAiIzdDNjU3MSIsICIjOUZCMkE0IiwgIiMwMEQ4OTEiLCAiIzE1QTA4QSIsICIjQkM2NUU5IiwgIiNGRkZGRkUiLCAiI0M2REM5OSIsICIjMjAzQjNDIiwKCiAgICAgICAgIiM2NzExOTAiLCAiIzZCM0E2NCIsICIjRjVFMUZGIiwgIiNGRkEwRjIiLCAiI0NDQUEzNSIsICIjMzc0NTI3IiwgIiM4QkI0MDAiLCAiIzc5Nzg2OCIsCiAgICAgICAgIiNDNjAwNUEiLCAiIzNCMDAwQSIsICIjQzg2MjQwIiwgIiMyOTYwN0MiLCAiIzQwMjMzNCIsICIjN0Q1QTQ0IiwgIiNDQ0I4N0MiLCAiI0I4ODE4MyIsCiAgICAgICAgIiNBQTUxOTkiLCAiI0I1RDZDMyIsICIjQTM4NDY5IiwgIiM5Rjk0RjAiLCAiI0E3NDU3MSIsICIjQjg5NEE2IiwgIiM3MUJCOEMiLCAiIzAwQjQzMyIsCiAgICAgICAgIiM3ODlFQzkiLCAiIzZEODBCQSIsICIjOTUzRjAwIiwgIiM1RUZGMDMiLCAiI0U0RkZGQyIsICIjMUJFMTc3IiwgIiNCQ0IxRTUiLCAiIzc2OTEyRiIsCiAgICAgICAgIiMwMDMxMDkiLCAiIzAwNjBDRCIsICIjRDIwMDk2IiwgIiM4OTU1NjMiLCAiIzI5MjAxRCIsICIjNUIzMjEzIiwgIiNBNzZGNDIiLCAiIzg5NDEyRSIsCiAgICAgICAgIiMxQTNBMkEiLCAiIzQ5NEI1QSIsICIjQTg4Qzg1IiwgIiNGNEFCQUEiLCAiI0EzRjNBQiIsICIjMDBDNkM4IiwgIiNFQThCNjYiLCAiIzk1OEE5RiIsCiAgICAgICAgIiNCREM5RDIiLCAiIzlGQTA2NCIsICIjQkU0NzAwIiwgIiM2NTgxODgiLCAiIzgzQTQ4NSIsICIjNDUzQzIzIiwgIiM0NzY3NUQiLCAiIzNBM0YwMCIsCiAgICAgICAgIiMwNjEyMDMiLCAiI0RGRkI3MSIsICIjODY4RTdFIiwgIiM5OEQwNTgiLCAiIzZDOEY3RCIsICIjRDdCRkMyIiwgIiMzQzNFNkUiLCAiI0Q4M0Q2NiIsCgogICAgICAgICIjMkY1RDlCIiwgIiM2QzVFNDYiLCAiI0QyNUI4OCIsICIjNUI2NTZDIiwgIiMwMEI1N0YiLCAiIzU0NUM0NiIsICIjODY2MDk3IiwgIiMzNjVEMjUiLAogICAgICAgICIjMjUyRjk5IiwgIiMwMENDRkYiLCAiIzY3NEU2MCIsICIjRkMwMDlDIiwgIiM5Mjg5NkIiKQpgYGAKCmBgYHtyfQpwaHlsdW1HbG9tbWVkIDwtIHRheF9nbG9tKHBzX3JhcmUsICJQaHlsdW0iKQoKI3QxCnBoeWx1bUdsb21tZWRfaGVyYl90MSA8LSBtZXJnZV9zYW1wbGVzKHN1YnNldF9zYW1wbGVzKHBoeXNlcT0gcGh5bHVtR2xvbW1lZCwgVGltZT09IlQxIiksIGdyb3VwID0gIkhlcmJpY2lkZSIpCnBoeWx1bUdsb21tZWRfaGVyYl90MSA8LSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyhwaHlsdW1HbG9tbWVkX2hlcmJfdDEsIGZ1bmN0aW9uKE9UVSkgT1RVL3N1bShPVFUpKQpzYW1wbGVfZGF0YShwaHlsdW1HbG9tbWVkX2hlcmJfdDEpJEhlcmJpY2lkZSA8LSBmYWN0b3Ioc2FtcGxlX2RhdGEocGh5bHVtR2xvbW1lZF9oZXJiX3QxKSRIZXJiaWNpZGUsIGxldmVscyA9IGMoMSwgMiwgMywgNCwgNSksIAogICAgICAgbGFiZWxzID0gYygiTm9uLVRyZWF0ZWQiLCAiSGFuZCIsICJBYXRyZXgiLCAiQ2xhcml0eSIsICJSb3VuZHVwIFBvd2VybWF4IikpCgpwbG90X2JhcihwaHlsdW1HbG9tbWVkX2hlcmJfdDEsIHggPSAiSGVyYmljaWRlIiwgZmlsbCA9ICJQaHlsdW0iKSAgKyB0aGVtZV9jbGFzc2ljKCkgKyBnZ3RpdGxlKCJQcm9wb3J0aW9uYWwgVGF4b24gQWJ1bmRhbmNlcyBUaW1lIDEiKSArCnRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKyBndWlkZXMoZmlsbD1ndWlkZV9sZWdlbmQobnJvdz02KSkgKyBnZW9tX2JhcihzdGF0PSJpZGVudGl0eSIpICsgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgc2l6ZSA9IDUpKSArIApzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xfdmVjdG9yKQpnZ3NhdmUoIi9Vc2Vycy9nb3Jkb25jdXN0ZXIvRGVza3RvcC9HaXRfUHJvamVjdHMvSGVyYmljaWRlX01pY3JvYmVzX1BUMS9GaWd1cmVzLzE2U19UYXhvbl9iYXJwbG90X3QxLnBkZiIpCgojdDIKcGh5bHVtR2xvbW1lZF9oZXJiX3QyIDwtIG1lcmdlX3NhbXBsZXMoc3Vic2V0X3NhbXBsZXMocGh5c2VxPSBwaHlsdW1HbG9tbWVkLCBUaW1lPT0iVDIiKSwgZ3JvdXAgPSAiSGVyYmljaWRlIikKcGh5bHVtR2xvbW1lZF9oZXJiX3QyIDwtIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKHBoeWx1bUdsb21tZWRfaGVyYl90MiwgZnVuY3Rpb24oT1RVKSBPVFUvc3VtKE9UVSkpCnNhbXBsZV9kYXRhKHBoeWx1bUdsb21tZWRfaGVyYl90MikkSGVyYmljaWRlIDwtIGZhY3RvcihzYW1wbGVfZGF0YShwaHlsdW1HbG9tbWVkX2hlcmJfdDIpJEhlcmJpY2lkZSwgbGV2ZWxzID0gYygxLCAyLCAzLCA0LCA1KSwgCiAgICAgICBsYWJlbHMgPSBjKCJOb24tVHJlYXRlZCIsICJIYW5kIiwgIkFhdHJleCIsICJDbGFyaXR5IiwgIlJvdW5kdXAgUG93ZXJtYXgiKSkKCnBsb3RfYmFyKHBoeWx1bUdsb21tZWRfaGVyYl90MiwgeCA9ICJIZXJiaWNpZGUiLCBmaWxsID0gIlBoeWx1bSIpICArIHRoZW1lX2NsYXNzaWMoKSArIGdndGl0bGUoIlByb3BvcnRpb25hbCBUYXhvbiBBYnVuZGFuY2VzIFRpbWUgMSIpICsKdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iKSArIGd1aWRlcyhmaWxsPWd1aWRlX2xlZ2VuZChucm93PTYpKSArIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKyB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCBzaXplID0gNSkpICsgCnNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbF92ZWN0b3IpCmdnc2F2ZSgiL1VzZXJzL2dvcmRvbmN1c3Rlci9EZXNrdG9wL0dpdF9Qcm9qZWN0cy9IZXJiaWNpZGVfTWljcm9iZXNfUHQxL0ZpZ3VyZXMvMTZTX1RheG9uX2JhcnBsb3RfdDIucGRmIikKCiN0MwpwaHlsdW1HbG9tbWVkX2hlcmJfdDMgPC0gbWVyZ2Vfc2FtcGxlcyhzdWJzZXRfc2FtcGxlcyhwaHlzZXE9IHBoeWx1bUdsb21tZWQsIFRpbWU9PSJUMyIpLCBncm91cCA9ICJIZXJiaWNpZGUiKQpwaHlsdW1HbG9tbWVkX2hlcmJfdDMgPC0gdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMocGh5bHVtR2xvbW1lZF9oZXJiX3QzLCBmdW5jdGlvbihPVFUpIE9UVS9zdW0oT1RVKSkKc2FtcGxlX2RhdGEocGh5bHVtR2xvbW1lZF9oZXJiX3QzKSRIZXJiaWNpZGUgPC0gZmFjdG9yKHNhbXBsZV9kYXRhKHBoeWx1bUdsb21tZWRfaGVyYl90MykkSGVyYmljaWRlLCBsZXZlbHMgPSBjKDEsIDIsIDMsIDQsIDUpLCAKICAgICAgIGxhYmVscyA9IGMoIk5vbi1UcmVhdGVkIiwgIkhhbmQiLCAiQWF0cmV4IiwgIkNsYXJpdHkiLCAiUm91bmR1cCBQb3dlcm1heCIpKQoKcGxvdF9iYXIocGh5bHVtR2xvbW1lZF9oZXJiX3QzLCB4ID0gIkhlcmJpY2lkZSIsIGZpbGwgPSAiUGh5bHVtIikgICsgdGhlbWVfY2xhc3NpYygpICsgZ2d0aXRsZSgiUHJvcG9ydGlvbmFsIFRheG9uIEFidW5kYW5jZXMgVGltZSAxIikgKwp0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIpICsgZ3VpZGVzKGZpbGw9Z3VpZGVfbGVnZW5kKG5yb3c9NikpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKSArIHRoZW1lKGF4aXMudGV4dC54PWVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHNpemUgPSA1KSkgKyAKc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sX3ZlY3RvcikKZ2dzYXZlKCIvVXNlcnMvZ29yZG9uY3VzdGVyL0Rlc2t0b3AvR2l0X1Byb2plY3RzL0hlcmJpY2lkZV9NaWNyb2Jlc19QdDEvRmlndXJlcy8xNlNfVGF4b25fYmFycGxvdF90My5wZGYiKQpgYGAKQ29tYmluZWQgaGVyYmljaWRlIGFuZCB0aW1lIGJhciBwbG90IGZvciBleHBsb3JhdGlvbgpgYGB7cn0Kc2FtcGxlX2RhdGEocHNfcmFyZSkkaGVyYl90aW1lPC1wYXN0ZShzYW1wbGVfZGF0YShwc19yYXJlKSRIZXJiaWNpZGUsIHNhbXBsZV9kYXRhKHBzX3JhcmUpJFRpbWUsIHNlcCA9ICJfIikKcHNfcmFyZV9mb3JfYmFycGxvdCA8LSBwcnVuZV90YXhhKHRheGFfc3Vtcyhwc19yYXJlKSA+IDUwLCBwc19yYXJlKQpwbG90X2Jhcihwc19yYXJlX2Zvcl9iYXJwbG90LCB4PSAiaGVyYl90aW1lIiwgZmlsbCA9ICJGYW1pbHkiKSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbF92ZWN0b3IpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKQpnZ3NhdmUoIi9Vc2Vycy9nb3Jkb25jdXN0ZXIvRGVza3RvcC9HaXRfUHJvamVjdHMvSGVyYmljaWRlX01pY3JvYmVzX1BUMS9GaWd1cmVzLzE2U19CYXJQbG90X0hlcmJpY2lkZV9UaW1lLnBkZiIsIHdpZHRoID0gMjAsIGhlaWdodCA9IDExKQpgYGAKCgpMaW5lYXIgbW9kZWxpbmcgb2YgYWJ1bmRhbnQgdGF4YQpgYGB7cn0KClRheF9nbG9tX1N1YnNldCA8LSBmdW5jdGlvbiAocGh5c2VxLCB5ID0gInRheExldmVsIiwgbnJldHVybnMgPSAiTnVtYmVyIG9mIHJldHVybnMiKXsKICAgcHNfMTwtIHRheF9nbG9tKHBzX3JhcmVfc3ViLCB0YXhyYW5rID0geSApCiAgICBteVRheGEgPC0gbmFtZXMoc29ydCh0YXhhX3N1bXMocHNfMSksIGRlY3JlYXNpbmcgPSBUUlVFKVsxOm5yZXR1cm5zXSkKICAgICAgIHBzXzFfc3ViIDwtIHBydW5lX3RheGEobXlUYXhhLCBwc18xKQogIHJldHVybihwc18xX3N1YikKfQoKcHNfcmFyZV9mYW1pbHlfdG9wMjU8LVRheF9nbG9tX1N1YnNldChwaHlzZXEgPSBwc19yYXJlLCBucmV0dXJucyA9IDI1LCB5ID0gIkZhbWlseSIpCgojZXhwbG9yZSB0b3AgMjUgdGF4YSB3aXRoIHBsb3QgYmFyCnBsb3RfYmFyKHBzX3JhcmVfZmFtaWx5X3RvcDI1LCB4PSAiaGVyYl90aW1lIiwgZmlsbCA9ICJGYW1pbHkiKSArIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbF92ZWN0b3IpICsgZ2VvbV9iYXIoc3RhdD0iaWRlbnRpdHkiKQoKCiN3cml0ZSBmdW5jdGlvbiB0byB3cmFuZ2xlIGRhdGEgcHJpb3IgdG8gYW5vdmEKCmFidW5kX2Fvdl93cmFuZ2xlIDwtIGZ1bmN0aW9uIChwaHlzZXEsIHkgPSAiVGF4X0xldmVsIil7CiAgdGF4PC10YXhfdGFibGUocGh5c2VxKVsseV0KICAgbWV0YTwtZGF0YS5mcmFtZShzYW1wbGVfZGF0YShwaHlzZXEpKQogIGNvdW50czwtZGF0YS5mcmFtZShvdHVfdGFibGUocGh5c2VxKSkKICByb3duYW1lcyhjb3VudHMpIDwtIHRheFssMV0KICBjb3VudHM8LWRhdGEuZnJhbWUodChjb3VudHMpKQogICBjb3VudHMkVGltZSA8LSBtZXRhJFRpbWUgCiAgIGNvdW50cyRIZXJiaWNpZGUgPC0gbWV0YSRIZXJiaWNpZGUgCiAgY291bnRzJEhlcmJfdGltZSA8LSBtZXRhJGhlcmJfdGltZSAKICByZXR1cm4oY291bnRzKQp9ICAgICAgICAgICAgCgp0ZXN0PC1hYnVuZF9hb3Zfd3JhbmdsZShwc19yYXJlX2ZhbWlseV90b3AyNSwgeSA9ICJGYW1pbHkiKQoKCm1vZF9hYnVuZDwtZnVuY3Rpb24oY291bnRfdGFiLCBEViA9ICJJbmRlcGVuZGVudCBWYXJpYWJsZSIpIHsKICBmb3IgKGkgaW4gMzpuY29sKGNvdW50X3RhYiktMikgewogICAgZm9yKGogaW4gMTpsZW5ndGgodW5pcXVlKGNvdW50X3RhYlssIkhlcmJpY2lkZSJdKSkpewogICAgICBkYXRhIDwtIGNvdW50X3RhYiAlPiUgZmlsdGVyKEhlcmJpY2lkZSA9PSB1bmlxdWUoY291bnRfdGFiJEhlcmJpY2lkZVtqXSkpCiAgICAgIG1vZCA8LSBhb3YodW5saXN0KGRhdGFbMV0pIH4gbWF0cml4KGRhdGFbLERWXSkpIAogICAgICAgICAgICAgIGlmKHN1bW1hcnkobW9kKVtbMV1dW1siUHIoPkYpIl1dWzFdIDw9IDAuMDUpIHsKICAgICAgICAgICAgICAgICAgZGF0YSA8LSBjb3VudF90YWIgJT4lIGZpbHRlcihIZXJiaWNpZGUgPT0gdW5pcXVlKGNvdW50X3RhYiRIZXJiaWNpZGVbal0pKQogICAjcmV0dXJuKGJveHBsb3QodW5saXN0KGRhdGFbMV0pIH4gbWF0cml4KGRhdGFbLERWXSksIG1haW4gPSAgcGFzdGUobmFtZXMoZGF0YVsxXSkpLCB4bGFiPSAiVGltZSIsIHlsYWI9IkFidW5kYW5jZSIpCiAgICAjICAgICAgKQpwcmludChib3hwbG90KHVubGlzdChkYXRhWzFdKSB+IG1hdHJpeChkYXRhWyxEVl0pLCBtYWluID1wYXN0ZShuYW1lcyhkYXRhW2ldKSwgYXMuY2hhcmFjdGVyKHVuaXF1ZShjb3VudF90YWJbLCJIZXJiaWNpZGUiXSkpW2pdKSwgeGxhYj0gIlRpbWUiLCB5bGFiPSJBYnVuZGFuY2UiKSApCiAgICAgIAogICAgICB9IAogICAgfQogIH0KfQoKCm1vZF9hYnVuZChjb3VudF90YWIgPSB0ZXN0LCBEViA9ICJUaW1lIikgIAoKYGBgCg==